OLD stage menu specs:	18bytes
0x0	2	stage name
0x2	2	selected stage
0x4	4	picture
0x8	4	stage# or -1 for random
0xC	4	min stages before selectable
0x10	4	1 if selectable
0x14	4	max # players


new stage menu specs:	8bytes
0x0	2	stage name (one name, long acceptable)
0x2	1	picture
0x3	1	stage# or FF for random
0x4	2	ID# for setup file
0x6	C0	difficulty mask for stage# below
		0	agent or above
		1	secret agent or above
		2	00 agent or above
		3	007
	3F	min stages before selectable
0x7	10	randomly-selectable
	08	available 4 player
	04	available 3 player
	02	available 2 player
	01	selectable (unlocked)

also, 8002B534 needs to be a byte or short, not a word...
	steal other half of address to resolve randomized entry
go with short - that will more than support everything


Without moving anything, that makes for 34 entries.
++++++++++++++++++++++++++++++++++++++++++++++++++

0xA2E4 (8002B074)
//7F014280:	setup for stage select drawing
LUI	AT,4208
MTC1	AT,F18
LUI	AT,41B0
MTC1	AT,F0
LUI	AT,42D8
MTC1	AT,F4
LUI	AT,4080
MTC1	AT,F8
ADD.S	F6,F0,F4
LUI	AT,42AA
LUI	S6,8003
MTC1	AT,F20
ADD.S	F10,F6,F8
OR	S1,R0,R0
ADDIU	S6,S6,B074	//S6=8002B074 (MP stage list)
SW	R0,00B4 (SP)
SWC1	F10,00DC (SP)
ADDIU	S8,R0,000C
ADDIU	S7,R0,0018
ADDIU	S5,SP,00D0
ADDIU	S4,SP,00D8
SWC1	F18,00D0 (SP)
SWC1	F0,00D4 (SP)
LUI	AT,42AC
MTC1	AT,F16
OR	S2,R0,R0
SWC1	F16,00D8 (SP)

//7F0142EC:	load images for each stage
SLTI	AT,S1,000C	//true if not past limit on MP stages (0xC)
BEQL	AT,R0,7F0144DC
LWC1	F18,00D8 (SP)	//X screen position, I think...
MULTU	S1,S7		//S1(current slot #) * 0x18 (size btw slots)
LUI	T2,8009
LW	T2,D134 (T2)	//T2=8008D134=offset to list of images
ADDIU	T3,R0,0002
OR	A0,S3,R0
ADDIU	A2,R0,0001
OR	A3,R0,R0
MFLO	T7
ADDU	T8,S6,T7	//T8=8002B074 (MP STAGE list) + offset to entry
LW	T9,0004 (T8)	//T9=IMG
SW	T3,0010 (SP)
MULTU	T9,S8		//img*C (offset in list of images)
MFLO	T1
ADDU	S0,T1,T2	//S0=offset to image declaration
JAL	7F076D68	//has something to do with loading the image
OR	A1,S0,R0	//A1=S0=offset to image decaration
//7F014338:
LUI	T4,8007
LW	T4,977C (T4)	//T4=8006977C=buffer for BA attribs
LW	T5,0138 (SP)
LUI	T7,BA00
BNE	S1,T4,7F01440C	
ADDIU	T6,T5,0008	//next command in DL
SW	T6,0138 (SP)	//DL command
ORI	T7,T7,1402	//T7=BA001402
LUI	T8,0010
SW	T8,0004 (T5)	//lower BA command (00100000)
SW	T7,0000 (T5)	//upper BA command (BA001402)
LW	T9,0138 (SP)	//DL command
LUI	T2,F800
ADDIU	T3,R0,FF0A
ADDIU	T1,T9,0008	//T1=next DL command
SW	T1,0138 (SP)	//DL command
SW	T3,0004 (T9)	//lower F8 command (FFFFFF0A)
SW	T2,0000 (T9)	//upper F8 command (F8000000)
LW	T4,0138 (SP)	//DL command
LUI	T7,C411
LUI	T6,B900
ADDIU	T5,T4,0008
SW	T5,0138 (SP)
ORI	T6,T6,031D	//T6=B900031D
ORI	T7,T7,2048	//T7=C4112048
SW	T7,0004 (T4)
SW	T6,0000 (T4)
ADDIU	T4,R0,00FF
ADDIU	T2,R0,00FF
ADDIU	T9,R0,0001
ADDIU	T3,R0,00FF
ADDIU	T1,R0,00FF
ADDIU	T8,R0,002C
SW	T8,0010 (SP)
SW	T1,0020 (SP)
SW	T3,0028 (SP)
SW	T9,001C (SP)
SW	T2,0024 (SP)
SW	T4,002C (SP)
SW	R0,0018 (SP)
SW	R0,0014 (SP)
LBU	T5,0006 (S0)
ADDIU	T7,R0,0001
SW	T7,0034 (SP)
SLT	T6,R0,T5
SW	T6,0030 (SP)
OR	A0,S3,R0
OR	A1,S4,R0
OR	A2,S5,R0
JAL	7F06AFE8	//screen placement, probably
ADDIU	A3,R0,0044
BEQ	R0,R0,7F0144DC
LWC1	F18,00D8 (SP)
//7F01440C:
JAL	7F0100D0
OR	A0,S1,R0
...
//7F0144DC:
ADDIU	S2,S2,0001	//S2++
ADDIU	AT,R0,0004	//AT=4
ADD.S	F4,F18,F20	//F4=F18 (current?) + 85.
ADDIU	S1,S1,0001	//S1++
BNE	S2,AT,7F0142EC	//test for rows, probably
SWC1	F4,00D8 (SP)
//7F0144F4:
LWC1	F6,00DC (SP)
LW	T6,00B4 (SP)
ADDIU	AT,R0,0003
ADD.S	F8,F6,F22
ADDIU	T7,T6,0001
SW	T7,00B4 (SP)
BNE	T7,AT,7F0142DC
SWC1	F8,00DC (SP)
//7F014514:
JAL	7F0ACD98
LW	A0,0138 (SP)
ADDIU	T8,R0,0097
LUI	S8,8004
SW	V0,0138 (SP)
OR	S5,R0,R0
SW	T8,0090 (SP)
ADDIU	S8,S8,0EB0
SW	R0,009C (SP)
ADDIU	S6,R0,0056
OR	S7,R0,R0
SLTI	AT,SS5,000C
BEQL	AT,R0,7F0146D0
ADDIU	S7,S7,0001
//7F01454C:	determine if selectable
JAL	7F0100D0
OR	A0,S5,R0
BEQ	V0,R0,7F0146CC	//if not selectable, branch
LUI	S2,9696
LUI	T2,8007
LW	T2,977C (T2)	//T2=8006977C	(BUFFER for BA attribs)
SLL	T9,S5,0x2
SUBU	T9,T9,S5
LUI	T1,8003
ADDIU	T1,T1,B074	//T1=8002B074	(MP stage select data)
SLL	T9,T9,0x3	//T9=S5*18	(offset to slot data)
ORI	S2,S2,9600	//S2=96969600
BNE	S5,T2,7F014588
ADDU	S3,T9,T1	//S3=slot data
ADDIU	S2,R0,FF00	//S2=-256
//7F014588:
JAL	7F0C1DD8	//returns V0=pointer to text
LHU	A0,0002 (S3)	//A0=text under selection
//7F014590:
LUI	T3,8004
LW	T3,0EAC (T3)
ADDIU	A0,SP,0128
ADDIU	A1,SP,0124
OR	A2,V0,R0
LW	A3,0000 (S8)
SW	R0,0014 (SP)
JAL	7F0AE98C
SW	T3,0010 (SP)
LW	V1,0028 (SP)
LW	T5,0090 (SP)
LW	T5,0124 (SP)
//7F0145C0:	shadow below primary text (or was it the other way around...)
ADDIU	S4,S6,FFE1
SUBU	A2,T4,V1
ADDU	T6,A2,V1
OR	A1,S4,R0
SW	T6,0010 (SP)
SW	A2,012C (SP)
SW	S4,0130 SP)
LW	A0,0138 (SP)
SW	R0,0014 (SP)
JAL	7F0AD014
ADDU	A3,S4,T5
SW	V0,0138 (SP)
JAL	7F0C1DD8
LHU	A0,0002 (S3)
//7F0145F8:
JAL	7000441C
OR	S1,V0,R0
AND START HERE LATER...


-------------

7F0100D0:	returns V0=1 if stage in slot is selectable
SLL	T6,A0,0x2
SUBU	T6,T6,A0
LUI	T7,8003
ADDIU	T7,T7,B074	//T7=8002B074 (MP stage list)
SLL	T6,T6,0x3	//T6=A0*18 (A0=slot#)
ADDU	V1,T6,T7	//V1=offset to slot data
LW	T8,0010 (V1)	//T8=selectable tag (1 if available)
ADDIU	SP,SP,FFE0
SW	RA,0014 (SP)
BNEZ	T8,7F010104
NOP
//7F0100FC:	if not selectable, follow this branch
BEQ	R0,R0,7F010160
OR	V0,R0,R0
//7F010104:	selectable stage
JAL	7F010290	//returns V0=players selected
SW	V1,0018 (SP)
LW	V1,0018 (SP)	//V1=slot data
LW	T9,0014 (V1)	//T9=max players
SLT	AT,T9,V0
BEQL	AT,R0,7F01012C
LW	A1,000C (V1)	//A1=stages before selectable
BEQ	R0,R0,7F010160	//if players>max, unselectable
OR	V0,R0,R0
//7F01012C:
ADDIU	AT,R0,FFFF	//AT=-1
LUI	A0,8003
BNE	A1,AT,7F010144	//if not generic, check the stages completed
OR	A2,R0,R0	//A2=0
BEQ	R0,R0,7F010160	//generic mp so V0=1 (selectable)
ADDIU	V0,R0,0001	//V0=1
//7F010144:	check stages completed
JAL	7F01E2C0	//returns V0=1 if stage completed
LW	A0,A8E8 (A0)	//A0=8002A8E8	(folder#)
BEQL	V0,R0,7F010160
	OR	V0,R0,R0
BEQ	R0,R0,7F010160
ADDIU	V0,R0,0001
//7F010160:
LW	RA,0014 (SP)
ADDIU	SP,SP,0020
JR	RA
NOP


-
7F010290:	returns V0=#players in MP menu, or 1 if MP menu not selected
LUI	T6,8003
LW	T6,A8F0 (T6)	//T6=8002A8F0	(MODE: 0 solo, 1 mp, 2 cheats)
ADDIU	AT,R0,0001
ADDIU	V0,R0,0001
BNE	T6,AT,7F0102B4	//return V0=1 if not solo menu
NOP
LUI	V0,8003
JR	RA
LW	V0,B520 (V0)	//V0=8002B520	(players on MP menu)
//7F0102B4:
JR	RA
NOP

7F01E2C0:	returns V0=1 if stage completed
expects	A0=folder#

-----------------
7F0C1DD8:	returns pointer to text string in given block
expects	A0=2byte text value
each text block can contain up to 3FF entries
SRA	T6,A0,0xA	//mask FC00
SLL	T7,T6,0x2	//T7=most of the first byte of text value
LUI	V0,8009
ADDU	V0,V0,T7	//V0=offset to block pointer
LW	V0,C640 (V0)	//V0=8008C640+	(pointer to text table)
ANDI	T8,A0,03FF	//T8=specific text entry
SLL	T9,T8,0x2	//T9=entry# to offset
ADDU	T0,V0,T9	//T0=pointer in table to text offset
LW	V1,0000 (T0)	//V1=offset to text
OR	A0,R0,R0
BEQ	V1,R0,7F0C1E14
NOP
ADDU	A0,V1,V0	//A0=pointer to text
JR	RA
OR	V0,A0,R0	//V0=A0
//7F0C1E14:	if a NULL entry, set a NULL pointer...
JR	RA
OR	V0,A0,R0	//V0=A0=0
